# Author:Foru
# 浮点数列表
temps = [ 3.2, 52.0, 41.2] # 对象就是浮点数
# 单词列表
words = ['hello','world'] # 字符串对象列表
# 一切都是对象
car_details = ['hu', 2.2, 520] #类似于字符串、浮点数、整数和列表本身都是对象


everything = [temps,words,car_details]
print(everything)

# 定义一个名为 vowels 的列表，查看一个单词中的各个字母是否在这里（元音）
vowels = ['a','e','i','o','u']
word = "milliways"
for letter in word: # 取单词中的各个字母
    if letter in vowels: # 如果它在"vowels"列表中
        print(letter)

# 用len查看列表内对象的多少
found = []
print(len(found))
found.append('a')
found.append('b')
print(len(found))
print(found)

# 只列出找到的每一个唯一的元音，即不重复出现
vowels = ['a','e','i','o','u']
word = "milliways"
found = []
for letter in word:
     if letter in vowels:  # 用in检查是否存在里面（使用in操作符检查一个对象是否包含在一个集合里）
         if letter not in found:  # 通过使用 not in ，只有当你知道要增加的对象不在列表是，才向列表追加这个对象
             found.append(letter)
for vowel in found:
     print(vowel)

# 增加 input 用户输入
# vowels = ['a','e','i','o','u']
# word = input("Provide a word to search for vowels: ")
# found = []
# for letter in word:
#     if letter in vowels:  # 用in检查是否存在里面（使用in操作符检查一个对象是否包含在一个集合里）
#         if letter not in found:  # 通过使用 not in ，只有当你知道要增加的对象不在列表是，才向列表追加这个对象
#             found.append(letter)
# for vowel in found:
#     print(vowel)


# 从列表删除对象
## 1.remove 从列表中删除指定数值的第一次出现（当知道想要删除的对象的值的时候使用）
nums = [1,2,3,4]
nums.remove(3) # 这个3不是索引值，是要删除的值
print(nums)

# 从列表弹出对象
## pop 1.如果没有指定索引值时，将删除和返回列表中的最后一个对象；
##     2.如果指定了索引值，则会删除和返回那个位置上的对象
nums.pop()
print(nums)

print(nums.pop(0)) # 返回被删除的对象
print(nums) # 返回列表删除完毕的样子

# 用对象扩展列表
## 1.使用append向现有列表增加单个对象（在现有列表的末尾）
## 2.extend，加入新的列表（在现有列表的末尾）
nums.extend([3,4]) # 在列表[2]的基础上加上新的列表[3,4]
print(nums)
## 3.insert 可以将对象加入到你想要的位置-取一个索引值和一个对象作为参考（但是不能插入末尾，因为这是append的工作）
nums.insert(0,5) # 0为要插入索引0的前面那个位置，5是插入的对象
print(nums)
## 4.还可以插入字符串
nums.insert(1,"foru")
print(nums)

# 把字符串“Don't panic”转换为字符串“on tap”

# 方法一
# phrase = "Don't panic!" # 开始是字符串
# plist = list(phrase) # 将字符串转变为列表
# print(phrase)
# print(plist)
# for i in range(4): # for循环迭代4次
#     plist.pop() # 无指定索引值，删除列表最后一个对象
#     # 上两行代码表明，先循环然后删掉最后一个对象，连续四次，所以删掉了后四个对象
#     print(plist)
# plist.pop(0) # 删除列表开头的 D
# plist.remove("'") # 删除引号
# plist.extend([plist.pop(),plist.pop()]) # 最先调用执行pop(从左到右)，第一个pop输出的是 a ,第二个是 p ,然后执行extend即放入[a,p]
# plist.insert(2,plist.pop(3)) # 先运行plist.pop(3)调出空格符，然后放入索引值2的位置
# new_phrase = ''.join(plist) # 把“plist”转换回一个字符串
# print(plist)
# print(new_phrase)

# 方法二(用切片的方法)
phrase = "Don't panic!"
plist = list(phrase)
print(phrase)
print(plist)
new_phrase = ''.join(plist[1:3])
new_phrase = new_phrase+''.join([plist[5],plist[4],plist[7],plist[6]])
print(plist)
print(new_phrase)

# 复制一个数据结构
## 赋值复制（这样复制的列表，一旦复制列表发生变化，原列表也会跟着变化）
first = [1,2,3]
second = first
print(second)
second.append(4)
print(second)
## 正确的复制方法
third = second.copy()
print(third)

# 列表切片的使用
## start、stop、step值
h = "Don't panic"
print(h)
print(h[0:10:3]) # 从第一个字母开始，每3个字母选择一个，直到（不包括）索引位置10
print(h[3:]) # 跳过前3个字母，从第四个开始，给出其余的全部
print(h[:10]) # 直到（但不包括）索引位置10的所有字母
print(h[::2]) # 每2个字母选择一个

# “for”循环了解
hello = "Marvin"
letters = list(hello)
for char in letters: # for循环会取letters列表中的各个对象，每次将一个字符赋给另一个变量，名为char
    # print('\t',char) # "letters"列表的各个字符会分行打印，前面有一个制表符（这是 \t 的作用）
    print('\t'*2,char) # *乘法操作符
